﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using QuanLyThuoc.BUS;
namespace QuanLyThuoc.PresentionLayer
{
    public partial class frmToaThuoc : Form
    {
        public int keyValue = 0;
        int vitri = 0;
        bool plAddMode = false;
        bool plEditMode = false;
        BindingSource dsToa;
        private AutoCompleteStringCollection auBN = new AutoCompleteStringCollection();
        private AutoCompleteStringCollection auTenThuoc = new AutoCompleteStringCollection();
        public frmToaThuoc()
        {
            InitializeComponent();
        }

        private void frmToaThuoc_Load(object sender, EventArgs e)
        {
            this.HienThiDanhSach();
            this.LoadTenBenhNhan();
            this.LoadTenThuocTheoID();
        }
        private void ResetControl()
        {
            //this.cbMathuoc.ReadOnly = !(this.plAddMode || this.plEditMode);
            this.txtChuanDoan.ReadOnly = !(this.plAddMode || this.plEditMode);
            this.txtDiaChi.ReadOnly = !(this.plAddMode || this.plEditMode);
            this.txtGioitinh.ReadOnly = !(this.plAddMode || this.plEditMode);
            this.txtTenBN.ReadOnly = !(this.plAddMode || this.plEditMode);
            this.txtNamSinh.ReadOnly = !(this.plAddMode || this.plEditMode);
            //this.datNgayTk.ReadOnly = !(this.plAddMode || this.plEditMode);
            this.txtNgayUong.ReadOnly = !(this.plAddMode || this.plEditMode);

            this.cmdAdd.Image = (this.plAddMode || this.plEditMode) ? QuanLyThuoc.Properties.Resources.save24 : QuanLyThuoc.Properties.Resources.Add24;
            this.cmdEdit.Image = (this.plAddMode || this.plEditMode) ? QuanLyThuoc.Properties.Resources.undo24 : QuanLyThuoc.Properties.Resources.Edit24;

            this.cmdAdd.Text = (this.plAddMode || this.plEditMode) ? "Lưu [F2]" : "Thêm [F2]";
            this.cmdEdit.Text = (this.plAddMode || this.plEditMode) ? "Hủy [F4]" : "Sửa [F4]";

            this.grdList.Enabled = !this.plAddMode;

        }
        private void HienThiDanhSach()
        {
            dsToa = new BindingSource();
            dsToa.DataSource = ToaThuocBUS.SelectAll_ToaThuoc();
            grdList.DataSource = dsToa;

        }
        private void LoadTenThuocTheoID()
        {
            this.auTenThuoc.Clear();
            DataTable dtthuoc = ThuocBUS.LayTenThuocTheoID();
            string lcValue = "";
            foreach (DataRow row in dtthuoc.Rows)
            {

                lcValue = row["TenThuoc"].ToString().PadRight(100, ' ') + "|" + row["IDThuoc"].ToString().Trim();
                //this.auTenNCC.Add(row["TenNCC"].ToString());
                this.auTenThuoc.Add(lcValue);
            }
            this.txtTenThuoc.AutoCompleteSource = AutoCompleteSource.CustomSource;
            this.txtTenThuoc.AutoCompleteMode = AutoCompleteMode.Suggest;
            this.txtTenThuoc.AutoCompleteCustomSource = this.auTenThuoc;
        }
        private void LoadTenBenhNhan()
        {
            this.auBN.Clear();
            DataTable dtBN = BenhNhanBUS.LayIDBenhNhanTheoTen();
            string lcValue = "";
            foreach (DataRow row in dtBN.Rows)
            {

                lcValue = row["TenBN"].ToString().PadRight(100, ' ') + "|" + row["IDBN"].ToString().Trim() + "|" + row["NamSinh"].ToString().PadRight(100, ' ') + "|" + row["Gioi"].ToString().PadRight(100, ' ') + "|" + row["DiaChi"].ToString().PadRight(100, ' ') + "|" + row["SoDT"].ToString().PadRight(100, ' ');
                //this.auTenNCC.Add(row["TenNCC"].ToString());
                this.auBN.Add(lcValue);
            }
            this.txtTenBN.AutoCompleteSource = AutoCompleteSource.CustomSource;
            this.txtTenBN.AutoCompleteMode = AutoCompleteMode.Suggest;
            this.txtTenBN.AutoCompleteCustomSource = this.auBN;
        }
        private void GanDK(DataGridViewRow r)
        {
            try
            {
                if (grdList.Rows.Count != 0)
                {
                     
                    this.txtMaToa.Text = r.Cells[0].Value.ToString();
                    this.txtIDThuoc.Text = r.Cells[1].Value.ToString();
                    this.txtTenThuoc.Text = r.Cells[2].Value.ToString();
                    this.txtIDBN.Text = r.Cells[3].Value.ToString();
                    this.txtTenBN.Text = r.Cells[4].Value.ToString();
                    this.txtNamSinh.Text = r.Cells[5].Value.ToString();
                    this.txtGioitinh.Text = r.Cells[6].Value.ToString();
                    this.txtDiaChi.Text = r.Cells[7].Value.ToString();
                    this.txtSoDT.Text = r.Cells[8].Value.ToString();

                    this.txtChuanDoan.Text = r.Cells[9].Value.ToString();
                    this.txtNgayUong.Text = r.Cells[10].Value.ToString();
                    this.datNgayTk.Text = r.Cells[11].Value.ToString();
                    this.datNgayTk.Text = r.Cells[12].Value.ToString();              
                }
                else
                {
                    this.txtMaToa.Text = "";
                    //this.cbMathuoc.Text = "";
                    this.txtTenBN.Text = "";
                    this.txtNamSinh.Text = "";
                    this.txtGioitinh.Text = "";
                    this.txtDiaChi.Text = "";
                    this.txtChuanDoan.Text = "";
                    this.txtNgayUong.Text = "";
                    this.datNgayTk.Text = "";
                }
            }
            catch (Exception ex)
            {
                
            }
        }
        private void AddBlank()
        {
            this.txtMaToa.Text = "";
            //this.cbMathuoc.Text = "";
            this.txtTenBN.Text = "";
            this.txtNamSinh.Text = "";
            this.txtGioitinh.Text = "";
            this.txtDiaChi.Text = "";
            this.txtChuanDoan.Text = "";
            this.txtNgayUong.Text = "";
            this.datNgayTk.Text = "";
            // HienThiDanhSachNhaCungCap();
        }
        private void Save()
        {


            int MaThuoc = int.Parse(txtIDThuoc.Text);
           string TenBN= this.txtTenBN.Text;
           string NamSinh= this.txtNamSinh.Text;
           string GioiTinh= this.txtGioitinh.Text ;
           string DiaChi=  this.txtDiaChi.Text ;
           string SoDT = this.txtSoDT.Text;
           string ChuanDoan= this.txtChuanDoan.Text ;
           int NgayUong = int.Parse(txtNgayUong.Text);
           string NgayTk = (string)datNgayTk.Text;
           int IDBN;
            
          

           DataTable dt = new DataTable();
           dt = BenhNhanBUS.SelectID_BenhNhanMAX();
           if (txtIDBN.Text == "")
           {
                IDBN = Convert.ToInt32(dt.Rows[0]["IDBN"].ToString()) + 1;
           }
           else
           {
                IDBN = int.Parse(txtIDBN.Text);
           }
           
           
           if (string.IsNullOrEmpty(this.txtMaToa.Text.Trim()))
            {

                string MaToa = Convert.ToDateTime(DateTime.Today).ToString("dd/MM/yyyy") + "-" + IDBN;
                if (KiemTraNhap())
                {
                    ToaThuocBUS.InsertToaThuoc(MaToa, MaThuoc, IDBN, TenBN, NamSinh, GioiTinh, DiaChi, SoDT, ChuanDoan, NgayUong, NgayTk);
                }
              
               
                //if (grdList.RowCount > 0)
                //{
                //    DataGridViewRow r = this.grdList.SelectedRows[0];
                //    this.AddBlank();

                //    Gan_Click();
                //}
            }
            else
            {
                string MaToa = this.txtMaToa.Text;
                if (KiemTraNhap())
                {
                ToaThuocBUS.UpdateToaThuoc(MaToa, MaThuoc, IDBN, TenBN, NamSinh, GioiTinh, DiaChi, SoDT, ChuanDoan, NgayUong, NgayTk);
                }
            }

        }

        private void AddNew()
        {
            this.plAddMode = true;
            this.plEditMode = false;


        }
        private void Edit()
        {
            this.plEditMode = true;
            this.plAddMode = false;
        }
        private void Undo()
        {
            
            vitri = grdList.CurrentCell.RowIndex;
            this.plAddMode = false;
            this.plEditMode = false;
        }
        private void Delete()
        {
            try
            {
                string MaToa = txtMaToa.Text.ToString();

               if (MessageBox.Show("Bạn có muốn xóa   mã toa thuốc '" + txtMaToa.Text + "'không ??", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    if (vitri == grdList.RowCount)
                    {
                        ToaThuocBUS.Delete_ToaThuoc(MaToa);
                        this.AddBlank();
                        grdList.CurrentCell = grdList.Rows[vitri - 1].Cells[0];
                        grdList.Rows[vitri - 1].Selected = true;
                        Gan_Click();
                    }
                    if (vitri == 0)
                    {
                        ToaThuocBUS.Delete_ToaThuoc(MaToa);
                        Gan_Click();
                        grdList.CurrentCell = grdList.Rows[vitri + 1].Cells[0];
                        grdList.Rows[vitri + 1].Selected = true;
                        this.AddBlank();
                        Gan_Click();
                    }
                    if (vitri > 0 && vitri < grdList.RowCount)
                    {
                        ToaThuocBUS.Delete_ToaThuoc(MaToa);
                        this.AddBlank();
                        grdList.CurrentCell = grdList.Rows[vitri - 1].Cells[0];
                        grdList.Rows[vitri - 1].Selected = true;
                        Gan_Click();
                    }

                }
            }
            catch (Exception ex)
            {
                // this.AddBlank();
                MessageBox.Show("Lỗi: " + ex.Message);
            }
        }

        protected override bool ProcessDialogKey(Keys keyData)
        {
            if (keyData.Equals(Keys.Escape))
            {
                this.keyValue = 0;
                if (!(this.plAddMode || this.plEditMode))
                {
                    this.Close();
                }
                else
                {
                    DialogResult dr = MessageBox.Show("Bạn có muốn đóng màn hình này không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (dr == DialogResult.Yes)
                        this.Close();
                }
            }
            else if (keyData.Equals(Keys.F2))
            {
                if ((this.plAddMode || this.plEditMode))
                    this.Save();
                else
                    this.AddNew();

                this.ResetControl();
            }
            else if (keyData.Equals(Keys.F3))
            {
                if (!(this.plAddMode || this.plEditMode))
                {
                    if (string.IsNullOrEmpty(this.txtFind.Text.Trim()))
                    {
                        this.txtFind.Select();
                        this.txtFind.SelectAll();
                    }
                    else
                    {
                        //this.Find();
                    }
                }
            }
            else if (keyData.Equals(Keys.F4))
            {
                if ((this.plAddMode || this.plEditMode))
                    this.Undo();
                else
                    this.Edit();
                this.ResetControl();
            }
            else if (keyData.Equals(Keys.Control | Keys.D))
            {
                if (!(this.plAddMode || this.plEditMode))
                    this.Delete();
                this.ResetControl();
            }
            //else if (keyData.Equals(Keys.Control | Keys.P))
            //{
            //    if (!(this.plAddMode || this.plEditMode))
            //        //this.Preview();
            //}
            return base.ProcessDialogKey(keyData);
        }
        public void Gan_Click()
        {
            try
            {
                if (this.grdList.SelectedRows.Count == 0)
                    return;
                DataGridViewRow rs = this.grdList.SelectedRows[0];
                GanDK(rs);
            }
            catch (Exception)
            {
                MessageBox.Show("Lỗi trong quá trình thực hiện");

            }
        }

        private void dtgList_CellClick(object sender, DataGridViewCellEventArgs e)
        {

           
        }

        private void cmdAdd_Click(object sender, EventArgs e)
        {
            if (this.plAddMode || this.plEditMode)
                this.Save();
            else
                this.AddBlank();

            this.plAddMode = !this.plAddMode;
            this.HienThiDanhSach();
            this.ResetControl();
        }

        private void cmdEdit_Click(object sender, EventArgs e)
        {
            if (this.plAddMode || this.plEditMode)
            {
                this.Undo();
                this.HienThiDanhSach();
            }
            else
            {

                this.Edit();
            }
            this.HienThiDanhSach();
            this.ResetControl();
        }

        private void cmdDel_Click(object sender, EventArgs e)
        {
            this.Delete();
            HienThiDanhSach();
        }

        #region Kiem tra dieu kien nhap
        private bool KTMaThuoc()
        {
            if (txtIDThuoc.Text.Trim()=="")
            {
                MessageBox.Show("Chưa nhập đúng tên thuốc vui lòng nhập lại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtTenThuoc.Focus();
                return false;
            }
            return true;
        }
        private bool KTTenBenhNhan()
        {
            if (txtTenBN.Text.Trim()=="")
            {
                MessageBox.Show("Chưa nhập tên bệnh nhân vui lòng nhập lại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtTenBN.Focus();
                return false;
            }
            return true;
        }
        private bool KTNamSinh()
        {
            if (txtNamSinh.Text.Trim() == "")
            {
                MessageBox.Show("Chưa nhập năm sinh", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtNamSinh.Focus();
                return false;
            }
            return true;
        }
        private bool KTGioiTinh()
        {
            if (txtGioitinh.Text.Trim() == "")
            {
                MessageBox.Show("Chưa nhập chưa nhập giới tính", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtGioitinh.Focus();
                return false;
            }
            return true;
        }
        private bool KTDiaChi()
        {
            if (txtDiaChi.Text.Trim() == "")
            {
                MessageBox.Show("Chưa nhập chưa nhập địa chỉ", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtDiaChi.Focus();
                return false;
            }
            return true;
        }
        private bool KTSoDT()
        {
            if (txtSoDT.Text.Trim() == "")
            {
                MessageBox.Show("Chưa nhập chưa nhập số điện thoại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtSoDT.Focus();
                return false;
            }
            return true;
        }
        private bool KTChuanDoan()
        {
            if (txtChuanDoan.Text.Trim() == "")
            {
                MessageBox.Show("Chưa nhập chưa nhập chuẩn đoán bệnh", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtChuanDoan.Focus();
                return false;
            }
            return true;
        }
        private bool KTSoNgayUong()
        {
            if (txtNgayUong.Text.Trim() == "")
            {
                MessageBox.Show("Chưa nhập chưa nhập số ngày uống", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtNgayUong.Focus();
                return false;
            }
            return true;
        }
        private bool KiemTraNhap()
        {
            return KTMaThuoc() && KTTenBenhNhan() && KTNamSinh() && KTGioiTinh() && KTDiaChi() && KTSoDT() && KTSoNgayUong();
        }
        #endregion 

        private void txtTenThuoc_Leave(object sender, EventArgs e)
        {
            string[] arr = this.txtTenThuoc.Text.Trim().Split('|');
            this.txtTenThuoc.Text = arr[0].Trim();
            if (arr.Length > 1)
                this.txtIDThuoc.Text = arr[1].Trim();
        }

        private void txtTenBN_Leave(object sender, EventArgs e)
        {
            string[] arr = this.txtTenBN.Text.Trim().Split('|');
            this.txtTenBN.Text = arr[0].Trim();
            if (arr.Length > 1)
                this.txtIDBN.Text = arr[1].Trim();
            if (arr.Length > 2)
                this.txtNamSinh.Text = arr[2].Trim();
            if (arr.Length > 3)
                this.txtGioitinh.Text = arr[3].Trim();
            if (arr.Length > 4)
                this.txtDiaChi.Text = arr[3].Trim();
            if (arr.Length > 5)
                this.txtSoDT.Text = arr[4].Trim();
        }

        private void grdList_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (this.grdList.SelectedRows.Count == 0)
                    return;
                DataGridViewRow rs = this.grdList.SelectedRows[0];
                GanDK(rs);
            }
            catch (Exception ex)
            {
                //MessageBox.Show("Lỗi trong quá trình thực hiện" + ex.Message);

            }

        }

        private void grdList_Click(object sender, EventArgs e)
        {
            if (grdList.RowCount > 0)
            {
                Gan_Click();
                vitri = grdList.CurrentCell.RowIndex;

            }
        }

        private void txtFind_KeyDown(object sender, KeyEventArgs e)
        {
            if (txtFind.Text.Trim()=="")
            {
                this.HienThiDanhSach();
            }
            else
            {
               
                dsToa.DataSource = ToaThuocBUS.SearchToaCondition(txtFind.Text);
                grdList.DataSource = dsToa;
            }
        }

        private void cmdPrev_Click(object sender, EventArgs e)
        {
            dsToa.MovePrevious();
        }

        private void cmdFirst_Click(object sender, EventArgs e)
        {
            dsToa.MoveFirst();
        }

        private void cmdNext_Click(object sender, EventArgs e)
        {
            dsToa.MoveNext();
        }

        private void cmdLast_Click(object sender, EventArgs e)
        {
            dsToa.MoveLast();
        }

    }
}